package se.cth.hedgehogphoto.database; import java.util.ArrayList; import java.util.List; /** * * @author Julia * */ public class JpaAlbumDao extends JpaDao<Album, String> implements AlbumDao{ private static Files files = Files.getInstance(); private static List<AlbumObject> albumList = files.getAlbumList(); public JpaAlbumDao(){ super(); } @Override public List<? extends AlbumI> getAllAlbums(){ return getAll(); } @Override public List<? extends AlbumI> searchfromDates(String search){ if(search.equals("")){ return findByLike("date",search.toLowerCase()); }else{ return null; } } @Override public List<? extends AlbumI> searchfromNames(String search){ if(search.equals("")){ return findByLike("albumName", search.toLowerCase()); }else{ return null; } } @Override public List<? extends AlbumI> searchfromComments(String search){ search = search.toLowerCase(); if(!(search.equals(""))){ JpaCommentDao jcd = new JpaCommentDao(); List<Comment> comments = jcd.findByLike("comment", search); if(!(comments.isEmpty())){ List<Album> albums = new ArrayList<Album>(); for(CommentObject comment:comments) albums.addAll(findByEntity(comment,"se.cth.hedgehogphoto.database.Comment")); } } return null; } @Override public List<? extends AlbumI> searchfromTags(String search){ search = search.toLowerCase(); if(!(search.equals(""))){ JpaTagDao jtd = new JpaTagDao(); List<Tag> tags = jtd.findByLike("Tag", search); List<Album> albums = new ArrayList<Album>(); for(TagObject t: tags){ albums.addAll(findByEntity(t,"se.cth.hedgehogphoto.database.Tag")); } return albums; } return null; } @Override public List<? extends AlbumI> searchfromLocations(String search){ search = search.toLowerCase(); if(!(search.equals(""))){ JpaLocationDao jld = new JpaLocationDao(); List<Location> locations = jld.findByLike("Location", search); List<Album> albums = new ArrayList<Album>(); for(LocationObject l:locations){ albums.addAll(findByEntity(l,"dao.database.Location")); } return albums; } return null; } @Override public void addTag(String tag, String albumName){ Album album = findById(albumName); if(album != null) { JpaTagDao jtd = new JpaTagDao(); Tag tagg = jtd.findById(tag); if(tagg!= null){ List<Album> albums = tagg.getAlbums(); if(!(albums.contains(album))){ beginTransaction(); albums.add(album); tagg.setAlbums(albums); entityManager.persist(tagg); commitTransaction(); } }else{ beginTransaction(); Tag newTag = new Tag(); newTag.setTag(tag); List<Album> albums = new ArrayList<Album>(); albums.add(album); newTag.setAlbums(albums); List<Tag> tags =album.getTags(); tags.add(newTag); album.setTags(tags); persist(album); entityManager.persist(newTag); commitTransaction(); } } } @Override public void addComment(String comment, String albumName){ albumName = albumName.toLowerCase(); comment = comment.toLowerCase(); Album album = findById(albumName); if(album != null) { JpaCommentDao jcd = new JpaCommentDao(); Comment comm = jcd.findById(comment); if(comm != null){ beginTransaction(); List<Album> albums = comm.getAlbums(); if((!albums.contains(album))){ albums.add(album); comm.setAlbums(albums); persist(album); entityManager.persist(comm);; commitTransaction(); } }else{ beginTransaction(); Comment com = new Comment(); com.setComment(comment); List<Album> albums = new ArrayList<Album>(); albums.add(album); com.setAlbums(albums); album.setComment(com); entityManager.persist(com); persist(album); commitTransaction(); } } } @Override public void addLocation(String location, String albumName){ albumName = albumName.toLowerCase(); location = location.toLowerCase(); Album album = findById(albumName); if(album != null) { JpaLocationDao jld = new JpaLocationDao(); Location loc = jld.findById(location); if(loc != null){ List<AlbumI> albums = (List<AlbumI>) loc.getAlbums(); if((!albums.contains(album))){ beginTransaction(); albums.add(album); loc.setAlbums(albums); album .setLocation(loc); persist(album); entityManager.persist(loc); commitTransaction(); } }else{ beginTransaction(); loc= new Location(); loc.setLocation(location); List<Album> albums = new ArrayList<Album>(); albums.add(album); loc.setAlbums(albums); album .setLocation(loc); entityManager.persist(loc); persist(album); commitTransaction(); } } } @Override public void deleteComment(String albumName){ albumName = albumName.toLowerCase(); AlbumObject album = findById(albumName); if(album != null){ CommentI com = album.getComment(); beginTransaction(); List<? extends AlbumI> albums = com.getAlbums(); albums.remove(album); com.setAlbums(albums); entityManager.persist(com); commitTransaction(); } } @Override public void deleteLocation(String albumName){ AlbumObject album = findById(albumName); if(album!= null){ LocationI loc = album.getLocation(); beginTransaction(); List<? extends AlbumI> albums = loc.getAlbums(); albums.remove(album); loc.setAlbums(albums); entityManager.persist(loc); commitTransaction(); } } @Override public void deleteTags(String albumName){ albumName = albumName.toLowerCase(); AlbumObject album = findById(albumName); if(album!= null){ List<? extends TagI> tags = album.getTags(); for(TagI tag: tags){ beginTransaction(); List<? extends AlbumI> albums =tag.getAlbums(); albums .remove(album); tag.setAlbums(albums); entityManager.persist(tag); commitTransaction(); } } } @Override public void deletePicture(String filePath){ JpaPictureDao jpd = new JpaPictureDao(); Picture picture = jpd.findById(filePath); if(picture != null){ beginTransaction(); Album album = picture.getAlbum(); List<? extends PictureI> pics = album.getPictures(); pics.remove(picture); album.setPictures(pics); persist(album); beginTransaction(); } } }